const express = require("express");

const session = require("cookie-session");
const multer = require("multer");
const path = require("path");
const fs = require("fs");
// token
const expressJwt = require('express-jwt');
const setting = require('./config/setting')
const verify = require('./config/verify')
// 创建应用
const app = express();
// 解析token获取用户信息
// app.use(function(req, res, next) {
//   console.log(req.headers);
// 	var token = req.headers['authorization'];
// 	if(token == undefined){
// 		return next();
// 	}else{
// 		vertoken.verToken(token).then((data)=> {
// 			req.data = data;
// 			return next();
// 		}).catch((error)=>{
// 			return next();
// 		})
// 	}
// });

//设置跨域访问
app.all('*', function (req, res, next) {
   //设置允许跨域的域名，*代表允许任意域名跨域
   res.header("Access-Control-Allow-Origin", "*");
   //允许的header类型
   res.header("Access-Control-Allow-Headers", "content-type");
   //接收ajax请求手动提交的cookie信息
   res.header("Access-Control-Allow-Credentials", true);
   //跨域允许的请求方式 
   res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
   //允许请求头携带的参数，否则出现跨域，允许参数：Origin, X-Requested-With, Content-Type, Accept, Authorization
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
  //  res.header('Access-Control-Allow-Headers:x-requested-with,content-type,Authorization')
   if (req.method == 'OPTIONS')
     res.sendStatus(200); //让options尝试请求快速结束
   else
     next();
});

// 验证token是否过期规定哪些路由不需要验证
app.use(expressJwt({
  secret: setting.token.signKey,
  algorithms: ['HS256']
}).unless({
  path: setting.token.unRoute // 除了这个地址，其余都需要验证
}))
app.use(function (err, req, res, next) {
  if (err.name === 'UnauthorizedError') {	
	  //  这个需要根据自己的业务逻辑来处理（ 具体的err值 请看下面）
    return res.status(401).json({
      code: 401,
      data:'授权超时,请重新登录'
    });
  }
});

//token失效返回信息
// app.use(function(err,req,res,next){
//   if(err.status==401){
//       return res.status(401).send('token失效')
//        //可以设置返回json 形式  res.json({message:'token失效'})
//   }
// })
// 上传图片配置
const upload = multer({
  // 上传文件的存储目录
  dest: "./static/upload",
  // 单个文件大小限制在2m以内
  limits: {
    fileSize: 1024 * 1024 * 2
  },
});
// 配置静态文件路径
app.use(express.static(path.resolve(__dirname, './static')));
app.use('/upload', express.static(path.resolve(__dirname, './static/upload')));
//注册express解析json格式       内置中间件
app.use(express.json());
//注册express解析encode格式     内置中间件
app.use(express.urlencoded({ extended: false }));
// 设置session
app.use(
  session({
    keys: ["secret"],
    maxAge: 100 * 60 * 30,
  })
);

// 挂载前台路由
const router = require("./router/index");
// 挂载登陆
const login = require("./router/login");
// 简历
const resume = require("./router/resume");
// 页面导航
const webpage = require("./router/Navigation");
// 用户
const user = require("./router/user");
// 轮播图
const banner = require('./router/banner');
// 网站设置
const setUp = require('./router/setUp');
// 挂载后台路由
const admin = require("./router/admin/index");
const auth = require("./middleware/auth");
const personal = require('./router/personal')

// 前台路由
app.use("/", router);
// 前台路由
app.use("/setUp", setUp);
// 个人日记路由
app.use("/personal", personal);
// 轮播图
app.use("/banner", banner);
// 简历路由
app.use("/resume", resume);
// 页面
app.use("/webpage", webpage);
// 登陆页面
app.use("/login", login);
// 用户页面
app.use("/user", user);
// 后台权限
app.use("/admin/?*", auth.allowToAdmin);
// 上传操作
app.post('/admin/?*', upload.single('upload'), (req, res, next) => {
  // 上传成功后的文件对象
  let { file } = req;
  if (file) {
    //file.originalname = 文件原名称
    let extname = path.extname(file.originalname);
    // file.path = 上传后的文件路径
    fs.renameSync(file.path, file.path + extname);
    // file.filename = 上传后的文件名
    req.uploadUrl = '/upload/' + file.filename + extname
  }
  next()
})
// 后台路由
app.use("/admin", admin);

// 监听服务器
app.listen(3000);
console.log("开启成功");
